<?php

namespace Com\Util;

class Http
{
	/**
	 * 发起一个HTTP/HTTPS的请求
	 * @param $url 接口的URL
	 * @param $params 接口参数   array('content'=>'test', 'format'=>'json');
	 * @param $method 请求类型    GET|POST
	 * @param $multi 图片信息
	 * @param $extheaders 扩展的包头信息
	 * @return string
	 */
	public static function request( $url , $params = array(), $method = 'GET' , $multi = false, $extheaders = array())
	{
		$url = trim($url);
		
		if(!function_exists('curl_init')) exit('Need to open the curl extension');
		$method = strtoupper($method);
		$ci = curl_init();
		curl_setopt($ci, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
		curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 3);
		curl_setopt($ci, CURLOPT_TIMEOUT, 3);
		curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, false);
		curl_setopt($ci, CURLOPT_HEADER, false);
		$headers = (array)$extheaders;
		switch ($method)
		{
		    case 'POST':
		    	curl_setopt($ci, CURLOPT_POST, TRUE);
		    	if (!empty($params))
		    	{
		    		if($multi)
		    		{
		    			foreach($multi as $key => $file)
		    			{
		    				$params[$key] = '@' . $file;
		    			}
		    			curl_setopt($ci, CURLOPT_POSTFIELDS, $params);
		    			$headers[] = 'Expect: ';
		    		}
		    		else
		    		{
		    			curl_setopt($ci, CURLOPT_POSTFIELDS, http_build_query($params));
		    		}
		    	}
		    	break;
		    case 'WECHAT':
		    	curl_setopt($ci, CURLOPT_POST, TRUE);
		    	curl_setopt($ch, CURLOPT_POSTFIELDS,$params);
		    	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		    	curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
		    	break;
		    case 'DELETE':
		    case 'GET':
		    	$method == 'DELETE' && curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
		    	if (!empty($params))
		    	{
		    		$url = $url . (strpos($url, '?') ? '&' : '?')
		    		. (is_array($params) ? http_build_query($params) : $params);
		    	}
		    	break;
		}
		curl_setopt($ci, CURLINFO_HEADER_OUT, TRUE );
		curl_setopt($ci, CURLOPT_URL, $url);
		if($headers)
		{
			curl_setopt($ci, CURLOPT_HTTPHEADER, $headers );
		}
		
		$response = curl_exec($ci);
		
		if (curl_errno($ci)) {
			return curl_error($ci);
		}
		
		curl_close ($ci);
		return $response;
	}
}